$fn=120; side=30; material=2; kerf=0.05; thickness=material-2*kerf; // Connector Piece. difference() { square(side,true); square([side,thickness],true); square([thickness,side],true); translate([side/2,side/2,0])square(side/2,true); //this is the upper rotated sqaure translate([0,15,0])rotate(45) square(5,true); //this is the down left square translate([side/-2,side/-2,0])square(side/2,true); translate([0,-15,0])rotate(45) square(5,true); //this is the down right square translate([side/2,side/-2,0])square(side/2,true); //this is the right rotated square translate([15,0,0])rotate(45) square(5,true); //this is the upper left suare translate([side/-2,side/2,0])square(side/2,true); //left rotated square translate([-15,0,0])rotate(45) square(5,true); } square(side/2,true); // Connector Piece. //Crescent Piece. translate([side,0,0]) intersection() { square(side); difference() { translate([side,side,0])circle(side); translate([side,side,0])circle(side/1.4); //Upper Notch translate([2,30,0])square(thickness,true); translate([2,29,0])square(thickness,true); translate([2,28,0])square(thickness,true); //Lower Notch translate([30,2,0])square(thickness,true); translate([29,2,0])square(thickness,true); translate([28,2,0])square(thickness,true); } } //Crescent Piece 2 translate([side,25,0]) intersection() { square(side); difference() { translate([side,side,0])circle(side); translate([side,side,0])circle(side/1.4); //Upper Notch translate([4,30,0])square(thickness,true); translate([4,29,0])square(thickness,true); translate([4,28,0])square(thickness,true); //Lower Notch translate([30,4,0])square(thickness,true); translate([29,4,0])square(thickness,true); translate([28,4,0])square(thickness,true); } } //Elipse Piece translate([side,70,0]) difference() { scale([1.5,.5])circle(d=40); //Left Square translate([-30,0,0])square(thickness,true); translate([-29,0,0])square(thickness,true); translate([-28,0,0])square(thickness,true); translate([-27,0,0])square(thickness,true); translate([-26,0,0])square(thickness,true); //Top Square translate([0,10,0])square(thickness,true); translate([0,9,0])square(thickness,true); translate([0,8,0])square(thickness,true); translate([0,7,0])square(thickness,true); translate([0,6,0])square(thickness,true); //Right Square translate([0,-10,0])square(thickness,true); translate([0,-9,0])square(thickness,true); translate([0,-8,0])square(thickness,true); translate([0,-7,0])square(thickness,true); translate([0,-6,0])square(thickness,true); //Lower Square translate([30,0,0])square(thickness,true); translate([29,0,0])square(thickness,true); translate([28,0,0])square(thickness,true); translate([27,0,0])square(thickness,true); translate([26,0,0])square(thickness,true); }